#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2024/12/6 22:46
# @Author  : 唐松
# @File    : yaml_handler.py
# @Software: PyCharm

import jsonpath
import yaml
from configs.setting import get_object_path
from util_tools.handle_data.csv_analysis_params import csv_analysis_params
from util_tools.logger_util import logs


def read_testcase_file(yaml_path, target_key = None):
    """
    读取测试用例文件并可选择获取特定关键字的值
    :param yaml_path: YAML文件路径
    :param target_key: 可选参数，指定要获取的关键字
    :return:
        如果指定了target_key: 返回匹配的所有值(列表)或单个值
        如果未指定target_key: 返回解析后的完整内容
    """
    
    try:
        # 打开指定路径的YAML文件, 使用UTF-8编码, 获取文件对象f
        with open(get_object_path() + '/' + yaml_path, encoding='utf-8') as f:
            # 使用yaml库加载文件内容, 解析为Python对象, 存储在caseinfo变量中
            caseinfo = yaml.load(stream=f, Loader=yaml.FullLoader)
            # 检查caseinfo的长度是否大于等于2
            if len(caseinfo) >= 2:
                return caseinfo
            else:
                # 使用jsonpath检查caseinfo中是否存在'parameters'字段
                if jsonpath.jsonpath(*caseinfo, '$.parameters'):
                    # 如果存在, 调用csv_analysis_params函数进行参数化处理, 并存储结果
                    new_caseinfo = csv_analysis_params(*caseinfo)
                    return new_caseinfo
                else:
                    # 如果不存在'parameters'字段, 直接返回caseinfo
                    return caseinfo

    except UnicodeDecodeError:
        logs.error('测试用例文件编码格式错误, 请检查! ')
    except Exception as e:
        logs.error(f'读取测试用例文件失败, 原因：{e}')


if __name__ == '__main__':
    caseinfo = read_testcase_file('testcase/wxApi/wx_login.yaml')
    print(caseinfo)
